home *** CD-ROM | disk | FTP | other *** search
/ Run Magazine ReRun 1984 Half 1 / rerun-1984-01-06-side-a.d64 / fnctkey feb p70 (.txt) < prev    next >
Commodore BASIC  |  2022-09-20  |  3KB  |  132 lines

  1. 0 rem  function keys
  2. 1 rem  commodore 64 version
  3. 2 rem
  4. 3 rem  by john tanzini
  5. 4 rem  and ron mindzak
  6. 5 rem
  7. 6 rem
  8. 7 rem**
  9. 8 rem*** variable list
  10. 9 rem**
  11. 10 rem t = actual top of memory
  12. 15 rem l = total length of all strings defined for function keys
  13. 20 rem sm = start of machine language program
  14. 25 rem ss = start of strings defined for function keys
  15. 30 rem pp = pointer to string pointers
  16. 35 rem sp = pointer to strings during loading of strings
  17. 40 rem c = counter to determine if byte read from data statement is a checksum
  18. 45 rem su = sum used to determine checksum
  19. 50 rem ch = checksum read from data statement
  20. 55 rem b = byte read from data statement
  21. 96 rem
  22. 97 rem**
  23. 98 rem*** calculate top of memory and reserve memory for strings
  24. 99 rem**
  25. 100 t = peek(55) + 256*peek(56)
  26. 110 poke 56, peek(46)+2
  27. 120 poke 52, peek(56)
  28. 130 print "[147]function keys":print
  29. 196 rem
  30. 197 rem**
  31. 198 rem*** define strings and print them out
  32. 199 rem**
  33. 200 dim f$(12)
  34. 210 f$(1) = "list "
  35. 220 f$(2) = "load"+chr$(34)
  36. 230 f$(3) = "run"
  37. 240 f$(4) = "save"+chr$(34)+"@:"
  38. 250 f$(5) = "print peek(     )[157][157][157][157][157][157]"
  39. 260 f$(6) = "open 15,8,15,"+chr$(34)
  40. 270 f$(7) = "print fre(0)"
  41. 280 f$(8) = "close 15"
  42. 290 f$(9) = "goto "
  43. 300 f$(10) = "gosub "
  44. 310 f$(11) = "return"
  45. 320 f$(12) = "poke "
  46. 330 for i = 1 to 12
  47. 340 print "f" + right$(str$(i),len(str$(i))-1) + " = ";
  48. 345 print chr$(34) + f$(i) + chr$(34)
  49. 350 next i
  50. 396 rem
  51. 397 rem**
  52. 398 rem*** determine starting locations for strings and machine language program
  53. 399 rem**
  54. 400 l = 0
  55. 410 for i = 1 to 12
  56. 420 l = l + len(f$(i))
  57. 430 next i
  58. 435 if l > 231 then print "strings too long": goto 800
  59. 440 sm = t - 132
  60. 450 ss = t - l - 156
  61. 496 rem
  62. 497 rem**
  63. 498 rem*** store strings and pointers
  64. 499 rem**
  65. 500 pp = ss: sp = ss + 12
  66. 510 for i = 1 to 7 step 2: gosub 1000: next i
  67. 520 for i = 2 to 8 step 2: gosub 1000: next i
  68. 530 for i = 9 to 12: gosub 1000: next i
  69. 596 rem
  70. 597 rem**
  71. 598 rem*** load machine language program
  72. 599 rem**
  73. 600 for i = sm to sm+131
  74. 610 read b
  75. 611 su = su + b
  76. 612 c = c + 1
  77. 613 if c<>19 and i<>(sm+131) then 620
  78. 614 read ch
  79. 615 if ch = su then c=0: su=0: goto 620
  80. 616 print: print "data statement error"
  81. 617 print "in line"; peek(63) + 256*peek(64)
  82. 618 goto 800
  83. 620 poke i, b
  84. 630 next i
  85. 696 rem
  86. 697 rem**
  87. 698 rem*** setup for machine language program
  88. 699 rem**
  89. 700 poke 250, sm/256
  90. 710 poke 249, sm-256*peek(250)
  91. 715 poke 248, 76
  92. 720 poke 252, ss/256
  93. 730 poke 251, ss-256*peek(252)
  94. 740 poke 649, 9
  95. 750 poke 55, peek(251): poke 56, peek(252)
  96. 760 poke 51, peek(251): poke 52, peek(252)
  97. 761 poke t-13, peek(789)
  98. 762 poke t-14, peek(788)
  99. 770 sys 248
  100. 780 new
  101. 796 rem
  102. 797 rem**
  103. 798 rem*** restore the actual top of memory if an error occors
  104. 799 rem**
  105. 800 poke 56, t/256
  106. 810 poke 55, t - 256*peek(56)
  107. 820 end
  108. 996 rem
  109. 997 rem**
  110. 998 rem*** subroutine to store strings for f$(i)
  111. 999 rem**
  112. 1000 poke pp, sp-ss: pp = pp+1
  113. 1005 if f$(i) = "" then 1060
  114. 1010 for j = 1 to len(f$(i))
  115. 1030 poke sp, asc(mid$(f$(i),j,1))
  116. 1040 sp = sp+1
  117. 1050 next j
  118. 1060 poke sp, 0
  119. 1070 sp = sp + 1
  120. 1080 return
  121. 8996 rem
  122. 8997 rem**
  123. 8998 rem*** data for machine language program
  124. 8999 rem**
  125. 9000 data120,165,250,141,21,3,165,249,24,105,21,144,3,238,21,3,141,20,3,1837
  126. 9010 data88,96,165,198,208,92,165,254,240,91,169,0,133,254,164,253,24,144,56,2794
  127. 9020 data201,6,240,17,202,201,5,240,12,202,201,4,240,7,169,255,141,128,2,2473
  128. 9030 data48,58,134,253,162,0,173,141,2,201,1,208,2,162,4,201,2,208,2,1962
  129. 9040 data162,8,138,24,101,253,205,128,2,240,30,141,128,2,168,177,251,168,162,2488
  130. 9050 data0,177,251,240,17,157,119,2,200,232,134,198,224,9,208,241,132,253,169,2963
  131. 9060 data1,133,254,76,49,234,162,3,165,197,201,3,240,187,202,24,144,162,2437
  132.